package cliente.comunicacion;


import herramientas.Agente_Properties;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;


import java.util.logging.Level;
import java.util.logging.Logger;
import server.comunicacion.IServidorA;
import server.dominio.ISesion;
import server.dominio.Medico;
import server.dominio.Usuario;
import server.excepciones.BeneficiarioInexistenteException;
import server.excepciones.CitaNoValidaException;
import server.excepciones.FechaNoValidaException;

import server.excepciones.MedicoInexistenteException;
import server.excepciones.MedicoNoExistenteException;
import server.excepciones.MedicoYaExistenteException;
import server.excepciones.UsuarioIncorrectoException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.Date;
import java.util.Vector;
import javax.swing.JOptionPane;

import server.dominio.Beneficiario;
import server.dominio.Cita;
import server.excepciones.BeneficiarioNoExistenteException;
import server.excepciones.BeneficiarioYaExistenteException;


public class Proxy implements Serializable{
    private static Proxy proxy= null;
    private String ip= "localhost";
    private String puerto= "2994";
    IServidorA servidor;

    private Proxy() {
        boolean valido= false;
        try {
            Agente_Properties gprop= Agente_Properties.getAgenteProperties();
            ip= gprop.getProperty("servidorA.ip");
            puerto= gprop.getProperty("servidorA.puerto");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } 
        try{
            this.servidor = (IServidorA) Naming.lookup("rmi://"+ip+":"+puerto+"/ServidorA");
            valido= true;

        }catch (NotBoundException ex) {
            JOptionPane.showMessageDialog(null, "El proxy no se ha podido conectar al servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (MalformedURLException ex) {
            JOptionPane.showMessageDialog(null, "El proxy no se ha podido conectar al servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El proxy no se ha podido conectar al servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
        if(!valido){
            JOptionPane.showMessageDialog(null, "A continuacion la aplicacion se Cerrará", "Error Critico", JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        }
    }
    public static Proxy getProxy(){

        if(proxy== null){
            proxy= new Proxy();
        }
        return proxy;
    }

    public ISesion identificar(String login, String pwd) throws UsuarioIncorrectoException, Exception{
        try {
            ISesion sesion= this.servidor.identificar(login, pwd);
            return sesion;
        }  catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
            System.out.println(ex.toString());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la bbdd del Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
            System.out.println(ex.toString());
        } 
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
        return null;
    }

    public void crear(long idSesion, Beneficiario beneficiario) throws BeneficiarioYaExistenteException, Exception{
        try {
            this.servidor.crear(idSesion, beneficiario);
        } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
    }

    public void crear(long id, Medico med) throws MedicoYaExistenteException{
        boolean ok= false;
        try {
            this.servidor.crear(id, med);
            ok= true;
        } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch(UsuarioIncorrectoException ex){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex){
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
        if(!ok){
            JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        }
    }

    public Beneficiario getBeneficiario(long idSesion, String dni) throws BeneficiarioInexistenteException, Exception{
        Beneficiario beneficiario= null;
        try {
            beneficiario= this.servidor.getBeneficiario(idSesion, dni);
            return beneficiario;
        } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);

        }
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
        return null;

    }
    public Beneficiario getBeneficiarionss(long idSesion, String nss) throws BeneficiarioInexistenteException {
        Beneficiario beneficiario= null;
        try {
            beneficiario= this.servidor.getBeneficiarioPorNSS(idSesion, nss);
            return beneficiario;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
        return null;
    }

    public void modificar(long idSesion, Beneficiario bene) throws BeneficiarioYaExistenteException, BeneficiarioNoExistenteException, Exception {
        boolean ok= false;
        try {
            servidor.modificar(idSesion, bene);
            ok= true;
        } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }  catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
        if(!ok){
                JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        

    }


    public void modificar(long idSesion, Medico medico) throws MedicoNoExistenteException, Exception  {
        boolean ok= false;
        try{
            servidor.modificar(idSesion, medico);
            ok= true;
        } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }  catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
        if(!ok){
            JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        }
        

    }

    public void modificarUsuario(long idSesion, Usuario usuario) throws Exception {
        try {
            servidor.mensajeAuxiliar(idSesion, 6, usuario);
      } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }
    public void modificarUsuarioM(long idSesion, Medico medico_aux) throws Exception {
        try {
            servidor.mensajeAuxiliar(idSesion, 5, medico_aux);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }

    public Medico getMedico(long idSesion, String dni) throws MedicoInexistenteException, Exception {
        Medico medico= null;
          try{
            medico= servidor.getMedico(idSesion, dni);
            return medico;
         } catch (RemoteException ex) {
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }  catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error en la conexión con el Servidor", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
        return null;
    }

    public void registrar(ICliente cliente, long idSesion)  {
        boolean ok= false;
        try {
            servidor.registrar(idSesion, cliente);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
            if(!ok){
                JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        
    }

    public void getDatosTablas(long idSesion){
        boolean ok= false;
        try {
            servidor.mensajeAuxiliar(idSesion, 1, null);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
            if(!ok){
                JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        
    }

    public void getCentros(long idSesion) {
        boolean ok= false;
        try {
            servidor.mensajeAuxiliar(idSesion, 2, null);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
            if(!ok){
                JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
           }
        
    }
    public void nuevousuario(long idSesion, Usuario usuario) {
        boolean ok= false;
        try {
            servidor.mensajeAuxiliar(idSesion, 3, usuario);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
            if(!ok){
                JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
                System.exit(1);
            }
        
    }

    public void borrarUsuario(long idSesion, Usuario usuario) throws Exception {
        boolean ok= false;
        try{
            servidor.mensajeAuxiliar(idSesion, 4, usuario);
            ok= true;
        } catch (UsuarioIncorrectoException ex){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }  
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
       

    }

    public void borrarMedico(long idSesion, Medico medico) throws MedicoNoExistenteException, Exception {
        boolean ok= false;
        try{
            servidor.eliminar(idSesion, medico);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex){
            System.out.println("error: "+ ex);
        }
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        
    }

    public void getMedicos(long idSesion) {
        boolean ok= false;
        try{
            servidor.mensajeAuxiliar(idSesion, 7, null);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        
    }

    public void nuevoBeneficiario(long idSesion, Beneficiario beneficiario) throws BeneficiarioYaExistenteException, SQLException, Exception{
        boolean ok= false;
        try{
            servidor.crear(idSesion, beneficiario);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex){
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        }
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        
    }

    public void borrarBeneficiario(long idSesion, Beneficiario beneficiario) throws BeneficiarioNoExistenteException, SQLException, Exception{
        boolean ok= false;
        try{
            servidor.eliminar(idSesion, beneficiario);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } 
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        
    }

    public void pedirhorario(long idSesion, String nif_medico) {
        boolean ok= false;
        try{
            servidor.mensajeAuxiliar(idSesion, 8, nif_medico);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        } finally{
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        }
    }

    public void modificarCalendario(long idSesion, Medico medicoseleccionado, Vector<Date> fechas, Date desde, Date hasta) {
        boolean ok= false;
        try{
            servidor.modificarCalendario(idSesion, medicoseleccionado, fechas, desde, hasta, null);
            ok= true;
        } catch (UsuarioIncorrectoException UIexception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException REexception) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception Ex) {
            JOptionPane.showMessageDialog(null, Ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        } finally{
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        }
    }

    public void refrescarCalendario(long idSesion, Medico medicoseleccionado) {
        boolean ok= false;
        try{
            servidor.mensajeAuxiliar(idSesion, 9, medicoseleccionado);
            ok= true;
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.toString(), "Error Critico", JOptionPane.ERROR_MESSAGE);
        } finally{
            if(!ok){
              JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
              System.exit(1);
            }
        }
    }
    public Vector<Cita> getCitas(long idSesion, String dni) throws BeneficiarioInexistenteException, Exception{
        try {
            return servidor.getCitas(idSesion, dni);
        } catch (UsuarioIncorrectoException exception){
             JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex){
              JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null, "El usuario ha conseguido acceder a funcionalides no funcionales en su rol", "Error Critico", JOptionPane.ERROR_MESSAGE);
Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } 
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
        return null;
    }

    public Cita pedirCita(long idSesion, Beneficiario beneficiario, int idMedico_pk, Date fecha_trabajo, int i) throws BeneficiarioInexistenteException, MedicoInexistenteException, FechaNoValidaException, Exception {
        try {
            return servidor.pedirCita(idSesion, beneficiario, "" + idMedico_pk, fecha_trabajo, 0);
        } catch (RemoteException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        }
        JOptionPane.showMessageDialog(null, "La aplicación se cerrará a continuación", "Error Critico", JOptionPane.ERROR_MESSAGE);
        System.exit(1);
        return null;
    }

    public void rechazarCita(long idSesion, Cita cita_aux) throws CitaNoValidaException, Exception {
        try {
            servidor.anularCita(idSesion, cita_aux);
        } catch (RemoteException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void obtenerfechasdias(long idSesion) {
        try {
            servidor.mensajeAuxiliar(idSesion, 10, null);
        } catch (RemoteException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void liberar(long idSesion) {
        try {
            servidor.liberar(idSesion);
        } catch (RemoteException ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Proxy.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
